#include "tim6.h"

/************************************************************************
*函数名：TIM6_delay1ms
*函数功能：TIM6延时1毫秒函数
*函数参数：无
*函数返回值：无
*函数说明：
*				时钟频率：84Mhz
*************************************************************************/
void TIM6_delay1ms(void)
{
	/*使能TIM6时钟*/
	RCC->APB1ENR |= (1<<4);

	/*配置TIM6时基单元*/
	TIM6->CNT = 0;//计数器清零
	TIM6->PSC = 8400-1;//分频8400
	TIM6->ARR = 10-1;//重装载值10

	/*软件更新（必须）*/
	TIM6->EGR |= (1<<0);//UG位置1，手动更新，PSC和ARR加载到影子寄存器
	TIM6->SR &= ~(1<<0);//清零中断标志位

	/*使能计数器*/
	TIM6->CR1 |= (1<<0);

	/*进行延时*/
	while(!TIM6->SR & (1<<0));//当计数器计数完成时，该位自动置1，循环结束

	/*关闭计数器*/
	TIM6->CR1 &= ~(1<<0);
}

/************************************************************************
*函数名：TIM6_delay1us
*函数功能：TIM6延时1微秒函数
*函数参数：无
*函数返回值：无
*函数说明：
*				时钟频率：84Mhz
*************************************************************************/
void TIM6_delay1us(void)
{
	/*使能TIM6时钟*/
	RCC->APB1ENR |= (1<<4);

	/*配置TIM6时基单元*/
	TIM6->CNT = 0;//计数器清零
	TIM6->PSC = 84-1;//分频8400
	TIM6->ARR = 1-1;//重装载值1

	/*软件更新（必须）*/
	TIM6->EGR |= (1<<0);//UG位置1，手动更新，PSC和ARR加载到影子寄存器
	TIM6->SR &= ~(1<<0);//清零中断标志位

	/*使能计数器*/
	TIM6->CR1 |= (1<<0);

	/*进行延时*/
	while(!TIM6->SR & (1<<0));//当计数器计数完成时，该位自动置1，循环结束

	/*关闭计数器*/
	TIM6->CR1 &= ~(1<<0);
}

/************************************************************************
*函数名：TIM6_delay_ms
*函数功能：TIM6延时函数
*函数参数：u32 n，指定毫秒数
*函数返回值：无
*函数说明：
*				n <= 6553
*************************************************************************/
void TIM6_delay_ms(u32 n)
{
	/*使能TIM6时钟*/
	RCC->APB1ENR |= (1<<4);

	/*配置TIM6时基单元*/
	TIM6->CNT = 0;//计数器清零
	TIM6->PSC = 8400-1;//分频8400
	TIM6->ARR = n*10-1;//重装载值10*n

	/*软件更新（必须）*/
	TIM6->EGR |= (1<<0);//UG位置1，手动更新，PSC和ARR加载到影子寄存器
	TIM6->SR &= ~(1<<0);//清零中断标志位

	/*使能计数器*/
	TIM6->CR1 |= (1<<0);

	/*进行延时*/
	while(!TIM6->SR & (1<<0));//当计数器计数完成时，该位自动置1，循环结束

	/*关闭计数器*/
	TIM6->CR1 &= ~(1<<0);
}


/************************************************************************
*函数名：TIM6_delay_us
*函数功能：TIM6延时函数
*函数参数：u32 n，指定微秒数
*函数返回值：无
*函数说明：
*************************************************************************/
void TIM6_delay_us(u32 n)
{
	/*使能TIM6时钟*/
	RCC->APB1ENR |= (1<<4);

	/*配置TIM6时基单元*/
	TIM6->CNT = 0;//计数器清零
	TIM6->PSC = 84-1;//分频8400
	TIM6->ARR = n*1-1;//重装载值1

	/*软件更新（必须）*/
	TIM6->EGR |= (1<<0);//UG位置1，手动更新，PSC和ARR加载到影子寄存器
	TIM6->SR &= ~(1<<0);//清零中断标志位

	/*使能计数器*/
	TIM6->CR1 |= (1<<0);

	/*进行延时*/
	while(!TIM6->SR & (1<<0));//当计数器计数完成时，该位自动置1，循环结束

	/*关闭计数器*/
	TIM6->CR1 &= ~(1<<0);
}
